library(Seurat)
library(monocle)
data<-readRDS("M_seurat_data.Rds")
m.group<-read.csv('m_clutser.csv',quote='',header=T,row.names=1,check.names=F)
data$nmf_cluster<-m.group$nmf_cluster
cell<-data@meta.data
data<-data@assays$RNA@counts
data <- CreateSeuratObject(counts = data)
data<-SplitObject(data, split.by = "orig.ident")
for (i in data){
    i <- NormalizeData(i, normalization.method = "LogNormalize")
    i <- FindVariableFeatures(i, nfeatures = 2000)
}
AllBatch.anchors <- FindIntegrationAnchors(object.list = data, dims = 1:30)
data<- IntegrateData(anchorset = AllBatch.anchors, dims = 1:30,k.weight=50)
data <- ScaleData(data, verbose = FALSE,features =rownames(data))
data <- RunPCA(data, features = VariableFeatures(object = data),npcs=50)
data <- RunTSNE(data, dims = 1:30)
data@meta.data<-cell
pdf('DimPlot_m_nmf_clutser.pdf',width=8,height=4)
DimPlot(data, group.by = 'nmf_cluster',reduction='tsne',split.by = 'nmf_cluster')
dev.off()

data@active.ident<-factor(data$nmf_cluster)
expr_matrix <- as(as.matrix(data@assays$RNA@counts),'sparseMatrix')
pdata <- data@meta.data
data@active.assay<-'RNA'
fdata <- data.frame(gene_short_name = row.names(data),row.names = row.names(data))
pd <- new('AnnotatedDataFrame', data = pdata)
fd <- new('AnnotatedDataFrame', data = fdata)
cds <- newCellDataSet(expr_matrix,phenoData = pd,featureData = fd,expressionFamily = negbinomial.size(),lowerDetectionLimit=0.1)
cds <- estimateSizeFactors(cds)
cds <- estimateDispersions(cds)
data <- FindVariableFeatures(data, nfeatures = 2000)
gene <- VariableFeatures(data)
cds <- setOrderingFilter(cds,gene)
cds <- reduceDimension(cds, max_components = 2,method = "DDRTree",norm_method='log')
data<-NormalizeData(data, normalization.method = "LogNormalize")
scale<-as.data.frame(data@assays[["RNA"]]@data)
scale<-scale[rowSums(scale)>0,]
scale<-as.data.frame(scale(scale))
scale$id<-rownames(scale)
sig<-read.csv('pcbc-stemsig.csv',quote='',header=T,row.names=1,check.names=F)
scale<-merge(sig,scale,by='id')
rownames(scale)<-scale$id
scale<-scale[,-1]
cor<-as.data.frame(t(cor(scale[,1],scale[,-1],method = 'spearman',use="complete.obs")))
names(cor)<-'mRNAsi'
cor$mRNAsi<-cor$mRNAsi-min(cor$mRNAsi)
cor$mRNAsi<-cor$mRNAsi/max(cor$mRNAsi)
cds <- orderCells(cds)
cor<-cbind(cor,pData(cds))
library(ggpubr)
library(ggsignif)
library(ggforce)
library(ggplot2)
cor$State<-paste('stahe',cor$State,sep='')
ggplot(cor,aes(x=State,y=mRNAsi))+geom_boxplot(width=0.5,aes(fill=State))+ theme(axis.text.x = element_text(angle = 45, hjust = 1))+theme_classic()
ggsave('stage_mRNAsi.pdf',width=6,height=5)

cds <- orderCells(cds,root_state = 2)
plot_cell_trajectory(cds, color_by="Pseudotime") 
ggsave('tree_Pseudotime.pdf',width=5,height=5)
plot_cell_trajectory(cds, color_by="nmf_cluster")
ggsave('tree_nmf.pdf',width=5,height=5)
Time_diff <- differentialGeneTest(cds[gene,],cores = 10)
Time_diff<-Time_diff[Time_diff$qval<0.05,]
pdf("Time_heatmapAll.pdf",width = 5,height = 10)
plot_pseudotime_heatmap(cds[Time_diff$gene_short_name,],norm_method='log',return_heatmap=T)
dev.off()

a<-data@assays$RNA@data
a<-as.data.frame(t(a))
gene<-read.csv('ferroptosis.csv',quote='',header = T,check.names=F)
gene<-a[,names(a)%in%gene$id]
gene<-as.data.frame(t(gene))
gene<-gene[rowSums(gene)>0,]
gene<-as.data.frame(t(scale(gene)))
gene$cluster<-pdata$nmf_cluster
gene<-aggregate(gene[,-369],by=list(gene$cluster),mean)
rownames(gene)<-gene$Group.1
gene<-gene[,-1]
gene<-as.data.frame(t(gene))
gene<-gene[order(rowSums(gene),decreasing = T),]
gene<-gene[1:50,]
number<-as.data.frame(table(pdata$nmf_cluster))
library('ComplexHeatmap')
library('circlize')
bar <- HeatmapAnnotation(sum = anno_barplot(number$Freq,bar_width = 0.9,gp = gpar(col = "white", fill = "grey"),border = F,axis_param = list(at = c(0,1000,2000),labels = c("0","1000","2000")),height = unit(2, "cm")), show_annotation_name = F)
pdf('heatmap_M_cluster.pdf',width=6,height=8)
Heatmap(t(scale(t(gene))),top_annotation=bar,cluster_columns = FALSE,name = "AveExpression",column_names_rot=0)
dev.off()

data.markers <- FindAllMarkers(data,logfc.threshold = 0.15,only.pos =TRUE)
data.markers<-data.markers[data.markers$p_val_adj<0.05,]
write.csv(data.markers,'M_makers_pos.csv',quote=F)
rm(a,cds,fd,pd,fdata,scale,sig,expr_matrix)
g1<-as.list(as.data.frame(data.markers[data.markers$cluster=='M_C1',7]))
data<-AddModuleScore(data,features = g1,name='M_C1')
g2<-as.list(as.data.frame(data.markers[data.markers$cluster=='M_C2',7]))
data<-AddModuleScore(data,features = g2,name='M_C2')
score<-FetchData(data,vars =c('tSNE_1','tSNE_2','M_C11','M_C21'))
data$label<-ifelse(data$nmf_cluster=='M_C1','M_C1/FOLR2+MAC','M_C2/TREM2+MAC')
names(score)[3:4]<-c('FOLR2+MAC','TREM2+MAC')
ggplot(score,aes(x=tSNE_1,y=tSNE_2,colour=`FOLR2+MAC`))+geom_point()+scale_color_gradientn(values=seq(0,1,0.2),colours=c('blue','cyan','green','yellow','orange','red'))+theme_bw()+ theme(panel.border =element_blank(),panel.grid.major =element_blank(),panel.grid.minor = element_blank(),axis.line = element_line(colour = "black"))
ggsave('DimPlot_FOLR2+MAC.pdf',width=6,height=5)
ggplot(score,aes(x=tSNE_1,y=tSNE_2,colour=`TREM2+MAC`))+geom_point()+scale_color_gradientn(values=seq(0,1,0.2),colours=c('blue','cyan','green','yellow','orange','red'))+theme_bw()+ theme(panel.border =element_blank(),panel.grid.major =element_blank(),panel.grid.minor = element_blank(),axis.line = element_line(colour = "black"))
ggsave('DimPlot_TREM2+MAC.pdf',width=6,height=5)

pdf('FeaturePlot_FOLR2+MAC_markers.pdf',width=5.5,height=6)
FeaturePlot(data,features=c('SEPP1','MRC1','FOLR2','LYVE1','SLC40A1','CD163'))
dev.off()
pdf('FeaturePlot_TREM2+MAC_markers.pdf',width=8,height=6)
FeaturePlot(data,features=c('TREM2','FN1','CXCR4','C3','S100A8','IFI6','SPP1'))
dev.off()


library(iTALK)
library(Matrix)
library(dplyr)
library(RColorBrewer)
all<- readRDS("seurat_annotated_data.Rds")
all<-SplitObject(all, split.by = "label")
all<-all[c(6,12)]
all[['Macrophage']]<-data
all<-merge(all[[1]],all[[2]])
iTalk_data <- as.data.frame(t(all@assays$RNA@counts))
iTalk_data$cell_type <- all$label
iTalk_data$compare_group <- 'Group'
highly_exprs_genes <- rawParse(iTalk_data, top_genes=50, stats="mean")
comm_list<-c('growth factor','other','cytokine','checkpoint')
cell_types <- unique(iTalk_data$cell_type)
iTalk_res <- NULL
for(comm_type in comm_list){
  res_cat <- FindLR(highly_exprs_genes, datatype='mean count', comm_type=comm_type)
  iTalk_res <- rbind(iTalk_res, res_cat)
}
iTalk_res <- iTalk_res[order(iTalk_res$cell_from_mean_exprs*iTalk_res$cell_to_mean_exprs,decreasing=T),]
iTalk_res<-iTalk_res[iTalk_res$cell_from=='Cancer Epithelial'| iTalk_res$cell_to=='Cancer Epithelial',]
mycolors <- brewer.pal(10,'Set1')
cell_col <- structure(mycolors[1:length(cell_types)], names=cell_types)
pdf('NetView.pdf',width=6,height=6)
NetView(iTalk_res,col=cell_col,vertex.size=25,vertex.label.cex=1,arrow.width=2,edge.max.width=3)
dev.off()
rm(iTalk_data,number,highly_exprs_genes,bar,comm_list,cell_types,cell_col,mycolors,res_cat,comm_type,pdata,g1,g2,AllBatch.anchors,i,Time_diff)
saveRDS(data, file="M_seurat_data_NMF.Rds")

cor_cell<-cor(score[,-1:-2])
library(corrplot)
pdf('pearson_cor_cell.pdf',width=4,height=4)
corrplot(cor_cell, method = "circle", tl.col='black', tl.cex=1,col=colorRampPalette(c("blue", "white", "red"))(100))
dev.off()
rm(data,all)
